package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 自动调用Person中所有的无参方法
 */
public class Test01 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {
        Class cls = Class.forName("reflect.Person");
        Object o = cls.newInstance();
        //获取当前类所有的公开方法(包含从超类继承的)
//        Method[] methods = cls.getMethods();
        //获取当前类自己定义的方法(包含私有方法)
        Method[] methods = cls.getDeclaredMethods();
        for(Method method : methods){
            int count = method.getParameterCount();//获取该方法的参数个数
            if(count==0){
                System.out.println(method.getName()+",参数个数:"+count);
                //查看是否为私有方法
                /*
                    int getModifiers()
                    返回的int值用于表示该方法的访问修饰符.
                    int的具体取值无需记住,使用类:Modifier的常量进行参照即可.
                    注:Modifier定义了很多int型的常量,并用常量名标注该int取值表示的访问修饰符
                 */
                int modifier = method.getModifiers();
                if(modifier != Modifier.PRIVATE){
                    method.invoke(o);
                }
            }

        }

    }
}
